#pragma once
#include <Rz/IObject.h>
#include "IDeviceResource.h"
#include "IBindableResource.h"

namespace Rz { namespace Graphics { namespace Render {

class IBuffer :
	virtual public IObject,
	virtual public IDeviceResource,
	virtual public IBindableResource
{
	public:
		RZ_RTTI_INTERFACE(Rz::Graphics::Render, IBuffer);
		RZ_RTTI_IMPLEMENTS(IObject, IDeviceResource, IBindableResource);
		RZ_RTTI_END;

		virtual void GetData(void* data, u32 count) const { return GetData(data, count, 0); }
		virtual void GetData(void* data, u32 count, u32 startIndex) const = 0;

		virtual void SetData(const void* data, u32 dataLength) { SetData(data, dataLength, 0, 0); }
		virtual void SetData(const void* data, u32 dataLength, u32 startIndex) { SetData(data, dataLength, startIndex, 0); }
		virtual void SetData(const void* data, u32 dataLength, u32 startIndex, u32 offsetInBytes) = 0;

};

} } }
